// 知识点1：对于模版使用时才会被实例化，会产生一个问题：相同的实例可能会出现在多个对象文件中，这时候每个文件都会有一份实例化的副本，这无疑造成了很大的额外开销，所以在C++11新标准下，我们可以使用显示实例化以避免这样的开销，所有的模版参数会被替换为模版实参：

// extern template class Blob<string>;        //实例化class声明
// template int compare(const int&, const int&);    //实例化compare函数定义
// 知识点2：当编译器遇到extern模版声明时，不会在本文件中生成实例化代码。将一个实例化声明为extern，就表示承诺在程序其他位置有该实例化的一个非extern定义，只能有一个定义！

// 知识点3：extern声明必须出现在任何使用该实例化版本的代码之前，其定义可以不放在本文件中，但是必须将定义的文件链接进来。

// 知识点4：一个类模版的实例化定义会实例化该模版的所有成员，包括内联函数成员，因为我们也不知道程序会使用那些成员函数，所以我们必须将其全部实例化，这就要求在实例化定义中，所用类型必须能作用于模版的所有成员函数

// 实例化声明class vector

// 实例化定义class vector，编译器会产生代码